package tp1


import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.Map
import tp1traits.carrera.Estadisticas

class Alumno (nombre: String, apellido: String, carrera: Carrera) extends Persona (nombre, apellido){
	var a_materias = new ArrayBuffer[Materia]()
		
	def filtrarMisCursos():ArrayBuffer[Curso]={
	  var cursos = new ArrayBuffer[Curso]
	  this.carrera.materias foreach{curso => cursos appendAll curso.dameCursosDeAlumno(this)}
	  cursos
	}
	
	def darseDeAltaEnCarrera(){
	  this.carrera.darDeAltaA(this)
	}
	
	def agregarMateria(materia:Materia){
	  a_materias += materia
	}
	/**auxiliar*/
	def listaDeNotas():ArrayBuffer[Nota]={
     var listaDeNotas = new ArrayBuffer[Nota]()
     this.a_materias foreach{materia => listaDeNotas.appendAll(materia.econtrarNotasDeAlumno(this))}
     listaDeNotas
	}
	
	override def cursosRealizados: (Int,Int) ={
	   
	   var cursosAprobados = 0
	   var cursosAbandonados = 0
	   this.a_materias foreach{f_materia => if(f_materia.aproboMateria(this)) {cursosAprobados += 1}
	     cursosAbandonados += f_materia.cantidadAbandonos(this)}
	   (cursosAprobados,cursosAbandonados)
	 }
	 
	 override def cantCursosAprobados:Int ={
     this.cursosRealizados._1
   }
	 
	 override def cantCursosAbandonados:Int ={
	 this.cursosRealizados._2
   }

     override def porcentajeDeCursosAprobados: Int ={
	 (this.cantCursosAprobados)*100/(this.cantCursosAprobados + this.cantCursosAbandonados)
   }
     
    override def TablaDeNotas():Map[Int,Int]={
     var map: Map[Int,Int] = Map()
	 this.InicializarMap(map)
	 this.listaDeNotas foreach{f_nota =>   map += f_nota.nota -> (map.get(f_nota.nota).get + 1)  }
	 map 
   }
    
   /**Aux de Tabla Notas: arma un map con las 10 notas en cantidad 0 (Nota -> Cantidad)*/
    override def InicializarMap(mapa: Map[Int,Int]){
     var tick = 0
     while(tick < 11){
     mapa += (tick -> 0);
     tick += 1
     }
   }
   
   override def notaMasAltaNVeces(n: Int):Int={
     var cantNotas:Map[Int,Int]=TablaDeNotas
     var result = 0
     cantNotas.keys.foreach{ i =>
       if(cantNotas(i)>= n && result <= i){
          result = i
       }
     }
     result
   }
   
    override def listaCorteAnual(anio:Int):ArrayBuffer[Curso]={
     filtrarMisCursos() filter(curso => curso.esDeAnio(anio))
   }
   
}
	 
